<?php

namespace Illuminate\Contracts\Validation;

interface Factory
{
    /**
     * 创建一个新的验证器实例
     *
     * @param  array $data 验证数据
     * @param  array $rules 验证规则
     * @param  array $messages 提示信息
     * @param  array $customAttributes 动态属性
     * @return \Illuminate\Contracts\Validation\Validator
     */
    public function make(array $data, array $rules, array $messages = [], array $customAttributes = []);

    /**
     * 注册一个自定义验证器扩展
     *
     * @param  string $rule
     * @param  \Closure|string $extension
     * @param  string|null $message
     * @return void
     */
    public function extend($rule, $extension, $message = null);

    /**
     * 注册一个自定义隐式验证器扩展
     *
     * @param  string $rule
     * @param  \Closure|string $extension
     * @param  string|null $message
     * @return void
     */
    public function extendImplicit($rule, $extension, $message = null);

    /**
     * 注册一个自定义隐式验证器消息替换器
     *
     * @param  string $rule
     * @param  \Closure|string $replacer
     * @return void
     */
    public function replacer($rule, $replacer);
}
